package niuke.week01;

import java.util.Scanner;

/**
 给一个长度为 n 的数组，数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
 例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。

 数据范围：，数组中元素的值
 要求：空间复杂度：，时间复杂度
 */
public class TimesThanHalf {
    public int MoreThanHalfNum_Solution2(int[] arr) {
        int mask[]  = new int[arr.length];
        int i=0,j=arr.length-1;
        while(i<=j){
            if(arr[i]!=arr[j]){
                mask[i]=0;
            }else {
                mask[i]=1;
            }
            i++;
            j--;
        }

        for (int idx=0;idx<arr.length;idx++) {
           if(mask[idx]==1)
               return arr[idx];
        }
        return 0;
    }

    public int MoreThanHalfNum_Solution(int [] arr) {
        int n = arr.length;
        int res=0 ;
        int times=0;
        for(int i=0;i<n;i++){
            if(times==0){
                res = arr[i];
                times=1;
            }else if(res==arr[i])
                times++;
            else
                times--;
        }

        return res;
    }
}